home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_08_05 / 8n05089a < prev    next >
Text File  |  1990-04-17  |  2KB  |  92 lines

  1. *****Listing 1*****
  2.  
  3. /*  Find the Potency of an A for a given M
  4.  *  The C Users Journal
  5.  *  Creating Pseudo Random Numbers
  6.  *  Robert Fruit
  7.  *
  8.  **************************************************************************/
  9.  
  10. int  potency( long A, long M )
  11. {
  12.   long B;                         /* power of A                           */
  13.   int  i;
  14.  
  15.   A--;                            /* decrement A for potency test         */
  16.   B = A;                          /* set initial power of A               */
  17.   B = B % M;
  18.   i = 0;
  19.   while( (B != 0) && (i < 25) ){  /* loop while power of A not zero       */
  20.     B = ( (A * B) % M );
  21.     i++;
  22.   }
  23.   if( i >= 25 )                   /* if test failed report error          */
  24.     i = -1;
  25.   return( i );
  26. }
  27.  
  28.  
  29.  
  30. /*  Find the Potency of an A for maximum unsigned long M
  31.  *  The C Users Journal
  32.  *  Creating Pseudo Random Numbers
  33.  *  Robert Fruit
  34.  *
  35.  **************************************************************************/
  36.  
  37. int  potencyMaxM( long A )
  38. {
  39.   long B;
  40.   int  i;
  41.  
  42.   A--;
  43.   B = A;
  44.   i = 0;
  45.   while( (B != 0) && (i < 25) ){
  46.     B = A * B;
  47.     i++;
  48.   }
  49.   if( i >= 25 )
  50.     i = -1;
  51.   return( i );
  52. }
  53.  
  54.  
  55.  
  56. /*
  57.  *  Test program to find the potency of A
  58.  *
  59.  **************************************************************************/
  60.  
  61. #include <stdio.h>
  62. #include <stdlib.h>
  63.  
  64. int  potency( long A, long M );
  65.  
  66. void main( void )
  67. {
  68.   int  pot;
  69.   long A,M;
  70.  
  71.   printf("\n\n\nFind the potency for A values for a given M\n\n");
  72.   printf("What is the M value --> ");
  73.   scanf("%ld",&M);
  74.   printf("\n\nWhat A value is to be tested --> ");
  75.   scanf("%ld",&A);
  76.   while( A != 0 ){
  77.     pot = potency( A, M );
  78.     printf("\nThe potency for A, %ld, given M, %ld, is %d",A,M,pot);
  79.     printf("\n\nWhat A value is to be tested --> ");
  80.     scanf("%ld",&A);
  81.   }
  82. }
  83.  
  84.  
  85.  
  86. Listing 2 includes two potency functions.  The first one needs a M value
  87. in order to calculate the potency.  The second potency function assumes
  88. that M has a value of 2^32, the maximum value for an unsigned long.  The
  89. testing program only uses the first potency function.
  90.  
  91.  
  92.